﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using LojaVirtual.Infra;
using LojaVirtual.Comuns.Produtos;
using LojaVirtual.Comuns.Clientes;

namespace LojaWeb
{
	public class LojaVirtualInitializer : DropCreateDatabaseIfModelChanges<LojaVirtualContext>
	{
		private Random r = new Random();

		protected override void Seed(LojaVirtualContext context)
		{
			var categorias = new List<Categoria>
			{
				new Categoria() { Nome = "Categoria 01", Produtos = new List<Produto>() },
				new Categoria() { Nome = "Categoria 02", Produtos = new List<Produto>() }
			};
			categorias.ForEach(s => context.Categorias.Add(s));
			context.SaveChanges();


			var produtos = new List<Produto>
			{
				new Produto() { Nome="Produto 01", Peso = 0.1, Preco = 100 },
				new Produto() { Nome="Produto 02", Peso = 0.2, Preco = 200 },
				new Produto() { Nome="Produto 03", Peso = 0.3, Preco = 300 },
				new Produto() { Nome="Produto 04", Peso = 0.4, Preco = 400 },
				new Produto() { Nome="Produto 05", Peso = 0.5, Preco = 500 },

				new Produto() { Nome="Produto 06", Peso = 0.6, Preco = 600 },
				new Produto() { Nome="Produto 07", Peso = 0.7, Preco = 700 },
				new Produto() { Nome="Produto 08", Peso = 0.8, Preco = 800 },
				new Produto() { Nome="Produto 09", Peso = 0.9, Preco = 900 },
				new Produto() { Nome="Produto 10", Peso = 1, Preco = 1000 },
			};
			produtos.ForEach(p => context.Produtos.Add(p));

			categorias[0].Produtos.Add(produtos[0]);
			categorias[0].Produtos.Add(produtos[1]);
			categorias[0].Produtos.Add(produtos[2]);
			categorias[0].Produtos.Add(produtos[3]);
			categorias[0].Produtos.Add(produtos[4]);

			categorias[1].Produtos.Add(produtos[5]);
			categorias[1].Produtos.Add(produtos[6]);
			categorias[1].Produtos.Add(produtos[7]);
			categorias[1].Produtos.Add(produtos[8]);
			categorias[1].Produtos.Add(produtos[9]);


			var clientes = new List<Cliente>
			{
				new Cliente() { Nome = "Cliente 01", Email = "Cliente01@email.com", Senha = "123123", Cep="60160110" },
				new Cliente() { Nome = "Cliente 02", Email = "Cliente02@email.com", Senha = "123123", Cep="60250120" },
				new Cliente() { Nome = "Cliente 03", Email = "Cliente03@email.com", Senha = "123123", Cep="60170230" },
				new Cliente() { Nome = "Cliente 04", Email = "Cliente04@email.com", Senha = "123123", Cep="60240140" },
				new Cliente() { Nome = "Cliente 05", Email = "Cliente05@email.com", Senha = "123123", Cep="60160250" },
			};
			clientes.ForEach(c => context.Clientes.Add(c));

			var compra = CriaCompra(clientes[1], produtos);
			context.Compras.Add(compra);
			
			//compra = CriaCompra(clientes[2], produtos);
			//context.Compras.Add(compra);
			
			//compra = CriaCompra(clientes[3], produtos);
			//context.Compras.Add(compra);
			
			//compra = CriaCompra(clientes[4], produtos);
			//context.Compras.Add(compra);

			context.SaveChanges();

		}

		private Compra CriaCompra(Cliente cliente, List<Produto> produtos)
		{
			var r = new Random();
			var compra = new Compra();
			compra.Itens = new List<ItemCompra>{
				new ItemCompra { Produto = produtos[r.Next(1, produtos.Count)], Quantidade = r.Next(1, 6) },
				new ItemCompra { Produto = produtos[r.Next(1, produtos.Count)], Quantidade = r.Next(1, 6) },
				new ItemCompra { Produto = produtos[r.Next(1, produtos.Count)], Quantidade = r.Next(1, 6) }
			};
			compra.Cliente = cliente;
			compra.DataEfetuada = DateTime.Now;

			return compra;
		}
	}
}